package extenstion

/**
 * 学习扩展（基础）
 *
 * 描述：
 *
 * 扩展是静态解析的
 * 扩展不能真正的修改他们所扩展的类。通过定义一个扩展，你并没有在一个类中插入新成员，
 * 仅仅是可以通过该类型的变量用点表达式去调用这个新函数。
 *
 */
public class Extenstion(val name: String) {

    fun sayHello() {
        println("$name say:Hello")
    }
}

/**
 * 扩展方法
 */
fun Extenstion.sayBye() {
    println("$name say:Bye")
}

fun main(args: Array<String>) {
    val extend = Extenstion("Walkud")

    extend.sayHello()
    extend.sayBye()

    val mutableList = mutableListOf("A", "B", "C")
    mutableList.swap(0, 2)
    mutableList.forEach(::print)

}


//扩展别人写好的类

/**
 * 扩展MutableList方法
 * 功能：交换位置
 */
fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
    val temp = this[index1]
    this[index1] = this[index2]
    this[index2] = temp
}

